home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / guvenlik / syslinux-3.07.exe / com32 / lib / setjmp.S < prev    next >
Encoding:
Text File  |  2004-11-10  |  962 b   |  59 lines

  1. #
  2. # arch/i386/setjmp.S
  3. #
  4. # setjmp/longjmp for the i386 architecture
  5. #
  6.  
  7. #
  8. # The jmp_buf is assumed to contain the following, in order:
  9. #    %ebx
  10. #    %esp
  11. #    %ebp
  12. #    %esi
  13. #    %edi
  14. #    <return address>
  15. #
  16.  
  17.     .text
  18.     .align 4
  19.     .globl setjmp
  20.     .type setjmp, @function
  21. setjmp:
  22. #ifdef REGPARM
  23.     movl %eax,%edx
  24. #else
  25.     movl 4(%esp),%edx
  26. #endif    
  27.     popl %ecx            # Return address, and adjust the stack
  28.     xorl %eax,%eax            # Return value
  29.     movl %ebx,(%edx)
  30.     movl %esp,4(%edx)        # Post-return %esp!
  31.     pushl %ecx            # Make the call/return stack happy
  32.     movl %ebp,8(%edx)
  33.     movl %esi,12(%edx)
  34.     movl %edi,16(%edx)
  35.     movl %ecx,20(%edx)        # Return address
  36.     ret
  37.  
  38.     .size setjmp,.-setjmp
  39.  
  40.     .text
  41.     .align 4
  42.     .globl longjmp
  43.     .type longjmp, @function
  44. longjmp:
  45. #ifdef REGPARM
  46.     xchgl %eax,%edx
  47. #else
  48.     movl 4(%esp),%edx        # jmp_ptr address
  49.     movl 8(%esp),%eax        # Return value
  50. #endif
  51.     movl (%edx),%ebx
  52.     movl 4(%edx),%esp
  53.     movl 8(%edx),%ebp
  54.     movl 12(%edx),%esi
  55.     movl 16(%edx),%edi
  56.     jmp *20(%edx)
  57.  
  58.     .size longjmp,.-longjmp
  59.